package com.mh.springboot;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map;

/**
 * 根据条件判断是否属于指定类
 */
public class OnClassConditional implements Condition {

    /**
     * 返回 true 则符合条件，返回 false 不符合条件
     */
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        // 通过元数据，获取所贴注解的传入信息，即@MhConditionOnClass注解的value属性值
        Map<String, Object> map = metadata.getAnnotationAttributes(MhConditionOnClass.class.getName());
        String className = (String) map.get("value");
        try {
            // 加载指定的类名，如果报错，那就说明该类不存在
            context.getClassLoader().loadClass(className);
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
}
